Sequence Stack のツールを使って WebGL ゲームに実績機能やカスタム ERC1155 を組み込む方法を学びましょう。
three
を使って作成された WebGL コンポーネントがいくつか含まれているテンプレートプロジェクトをクローンします。すべて webpack でコンパイルされています。
Template WebGL JS Web SDK Starter
上記リポジトリをクローンし、cd template-webgl-js-sequence-kit-starter
でディレクトリに移動します。
.env.example
を参考に、環境変数を記載した .env
ファイルを作成します。
App.jsx
コンポーネントのセットアップsrc
フォルダ内に react
フォルダを作成し、2 つのファイル(App.jsx
と Login.jsx
)を作成します。
App.jsx
には次のコードを記述します。
Login.jsx
ファイルに以下のコードを追加し、画面上部にログインボタンを作成します。
index.js
でコンポーネントをレンダリングindex.js
で App.jsx
コンポーネントをインポートし、index.html
の root
ID 要素にレンダリングします。
Login.jsx
コンポーネントに以下のコードを追加します。
index.js
に次のクリックハンドラコードを追加します。
index.html
に追加します。
Minter Role
として入力してください。
コレクティブルのミントには、飛行機用と実績用の2種類のパスを用意します。
これは、Cloudflare リクエストボディに isPlane
というキー/値を追加し、Cloudflare Worker 側で if/else
を追加することで実現しています。
このコードはこちらの GitHub リポジトリで確認できます。
このガイドでは、Cloudflare のコードはローカル開発環境で実行します。プロジェクトフォルダ内で、以下のコマンドで Cloudflare Worker を起動してください。
index.js
では、index.html
の要素の onclick
属性にボタンを追加しています。
callContract
はミント処理を担当し、1回のミントのみが同時に行われるようミューテックスでラップされた fetch を呼び出します。これは /API/SequenceController.js
の SequenceController
クラスに追加されています。
fetchPlaneTokens
はウォレットに資産が追加されるまでポーリングし、plane color
を変更して別の飛行機を表現します。
fetchPlaneTokens
は次のコードで実装されており、残高の条件チェックは1より大きいかどうか、tokenID
は検索対象の ID と一致するかどうかで判定しています。
このUIの条件付きロジックは、アプリケーションに応じて変更してください。
burn achievement
ボタンを追加するUI変更を実装します。
まず、前回と同様の HTML/JS のクリックハンドラーのロジックを実装します。
今回は、callContract
の isPlane
値を false
に設定します。
SequenceController
に追加された fetchTokensFromAchievementMint
を呼び出します。
display
属性によってボタンが表示されるようになります。
msg.sender
が relayer
アドレスの一つになる)、今回はコントラクト内の msg.sender
がトークンの所有権を証明し、user
から直接送信される必要があるからです。これを実現するために、wagmi
のフロントエンド関数とクラスの組み合わせを利用します。
burnToken
は、Reactコンポーネントから渡される関数で、ミューテックスを使うパターンを踏襲し、wagmi
パッケージの sendTransaction
を使ってトランザクションを送信し、トランザクションハッシュの更新を待ってコールバックを返します。
SequenceController
では、burnToken
でラップした sendBurnToken
関数を呼び出し、Reactの関数をアプリケーション全体で利用できるようにします。
SequenceController
内の次のコードで実現します。
wagmi
でトークンをバーンする際のポップアップが減少し、アチーブメントトークンの付与やコレクティブルのミントは Cloudflare Worker を利用してガスレスで実行されます。
これは、いくつかの環境変数を追加し、使用するコネクタの種類を切り替えることで実現できます。
まず、以下の環境変数を .env
ファイルに追加してください。
App.jsx
の Web SDK コネクタに渡してください。